import {request} from "../../util/request.js";
import dialog from "../../util/dialog.js";
import "./multi-sync.less";
export default {
    template:` 
            <div id="multi-sync" v-if="is_show && (uniacid === 0 || now_uniacid === uniacid)">
                <button class="btn btn-success" type="button" @click="startSync">将之前的单开版数据同步到本公众号</button>
                <div id="doing" v-if="doing">
                    <div class="box">
                        <h2>正在同步中，请不要关闭网页，数据过多时用时较长，请耐心等待</h2>
                        <h2>已同步数据:{{sync_number}} / 总数据:{{total}}</h2>
                    </div>
                </div>                
            </div> 
            `,
    data:function(){
        return {
            is_show:false,
            now_uniacid:parseInt(window.sysinfo.uniacid),
            uniacid:0,
            doing:false,   //是否同步中
            total:0,  //总数据
            sync_number:0,   //已同步数量
            tables:[]   //数据表
        }
    },
    created:function(){
        this.multiSyncTest()
            .then((sync)=>{
                if(sync){
                    this.is_show = true;
                    this.getBindUniacid();
                }
            })
    },
    methods: {
        /**
         * 多开同步数据检测
         */
        multiSyncTest(){
            return new Promise((success)=>{
                request("multiSync/multiSyncTest")
                    .then((res)=>{
                        if(res.data.status === "success"){
                            success(true);
                        }else{
                            success(false);
                        }
                    });
            });
        },
        /**
         * 获取同步数据绑定的uniacid
         */
        getBindUniacid(){
            return new Promise((success)=>{
                request("multiSync/getSyncUniacid")
                    .then((res)=>{
                        if(res.data.status === "success"){
                            this.uniacid = res.data.data;
                            success();
                        }
                    });
            });
        },
        /**
         * 开始同步
         */
        startSync(){
            dialog.confirm(this,"开始同步后不可以将数据再次同步到其他公众号，确定要将之前单开版本的数据同步到本公众号吗？",(res)=>{
                if(res){
                    this.getSyncTables()
                        .then(()=>{
                            return this.getSyncNumber();
                        })
                        .then(()=>{
                            this.doing = true;
                            for(let i=0;i<this.tables.length;i++){
                                let table_name = this.tables[i];
                                this.sync(table_name)
                                    .then(()=>{
                                        if(this.tables.length - 1 === i){
                                            console.log(this.tables.length,i);
                                            this.multiSyncTest()
                                                .then((sync)=>{
                                                    console.log(sync);
                                                    if(sync){
                                                        this.is_show = true;
                                                    }else{
                                                        this.is_show = false;
                                                    }
                                                });
                                            setTimeout(()=>{
                                                this.doing = false;
                                            },1000);
                                        }
                                    });
                            }
                        });
                }
            });
        },
        /**
         * 获取需要同步的数据表
         */
        getSyncTables(){
            return new Promise((success)=>{
                request("multiSync/getSyncTables")
                    .then((res)=>{
                        if(res.data.status === "success"){
                            this.tables = res.data.data;
                            success();
                        }
                    });
            });
        },
        /**
         * 获取同步数据数量
         */
        getSyncNumber(){
            return new Promise((success)=>{
                request("multiSync/getSyncNumber")
                    .then((res)=>{
                        if(res.data.status === "success"){
                            this.total = res.data.data;
                            success();
                        }
                    });
            });
        },
        /**
         * 同步数据
         * @param table_name 数据库名字
         */
        sync(table_name){
            return new Promise((success)=>{
                request("multiSync/get",{
                    table_name
                })
                    .then((res)=>{
                        if(res.data.status === "success"){
                            let sync_id = res.data.data;
                            request("multiSync/sync",{
                                table_name,
                                sync_id
                            })
                                .then(()=>{
                                    ++this.sync_number;
                                    return this.sync(table_name);
                                });
                        }else{
                            success();
                        }
                    });
            });
        }
    }
};